package com.lgcns.android2;

import java.lang.ref.SoftReference;
import java.util.HashMap;

import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

/**
 * Bitmap객체에 대한 메모리 관리 및 캐싱을 위해 Bitmap을 HashMap으로 관리하기 위한 클래스
 * 
 * @author kim.jiseong
 *
 */
public class BitmapCache {

    private Context mContext;
    private HashMap<Integer, SoftReference<Bitmap>> mCache;
    private BitmapFactory.Options mOptions;
    
    public BitmapCache(Context context, BitmapFactory.Options options) {
        this.mContext = context;
        this.mOptions = options;
        
        mCache = new HashMap<Integer, SoftReference<Bitmap>>(50);
    }

    public Bitmap get(Cursor cursor) {
        int idNum = cursor.getInt(cursor.getColumnIndex(Constants.ID_NUM));
        Bitmap bitmap = null;
        
        if (mCache.get(idNum) == null || mCache.get(idNum).get() == null) {
            // cache된 Bitmap 객체 존재하지 않음
            bitmap = Util.getProfileImage(mContext, cursor, mOptions);
            mCache.put(Integer.valueOf(idNum), new SoftReference<Bitmap>(bitmap));
        } else {
            // cache된 Bitmap 객체 존재
            bitmap = mCache.get(idNum).get();
        }
        
        return bitmap;
    }
    
    public void remove(int idNum) {
        mCache.remove(idNum);
    }
}
